<?php
Class ContratosController extends AppController
{
	var $name = 'Contratos';
	var $components = array('ModelLoader');
	
/**
*Funcion que agrega un contrato de un respectivo cliente, con su fecha de inicio y fin.
*
*Esta funcion agrega un contrato de un cliente, es necesario el id del cliente y las fechas que abarcan el contrato.
*@return
*@param integer $idCliente el id del cliente al que esta asociado el contrato
*@param date $fechaIni fecha de inicio del contrato, recibe en formato d-m-Y
*@param date $fechaFin fecha de fin del contrato
*/	
	function add($idCliente,$fechaIni,$cantMeses)
	{
		//Convertimos la fecha a de tipo d-m-Y a Y-m-d
		$aFecha=split('-',$fechaIni);
		$nuevaFechaIni = $aFecha[2].'-'.$aFecha[1].'-'.$aFecha[0];

// 		$fechaIni='20-12-2007';
// 		$fechaFin='2007-12-12';
// 		$idCliente='1';
		$insert_query = "insert into contratos (`fecha_inicio`,`fecha_fin`,`clientes_id`) values ('$nuevaFechaIni',DATE_ADD('$nuevaFechaIni', INTERVAL $cantMeses MONTH),$idCliente)";
		$this->Contrato->execute($insert_query);
	}
	
/**
 * Finaliza el contrato de un cliente con la fecha especificada
 * @return  true, si fue posible finalizar el contrato
 * 			false,no fue posible finalizar el contrato
 * 			array con las prestaciones futuras a la fecha nueva de finalizacion, no fue posible finalizar el contrato
 * @param $iIdCliente
 * @param $dFechaNueva, fecha de finalizacion de contrato
 */
	function finalizar($iIdCliente,$dFechaNueva){
		//obtengo el id de los servicios de custodia y expurgue
		$iIdServicioCustodia = $this->getConfigIni('Servicios','servicioCustodia');
		$iIdServicioExpurgue = $this->getConfigIni('Servicios','servicioExpurgue');
		
		$dFechaNueva = $this->ultimoDia($dFechaNueva);//establece que la finalizacino sea en el ultimo dia del mes.
		
		//primero controla si tiene un contrato para finalizar
		
		//para eso evalua el ultimo mes del ultimo contrato y controla si esta cerrado dicho mes.
		$this->Contrato->unBindModel(array("belongsTo"=>array("Cliente")));
		$sConditions = "clientes_id = $iIdCliente";
		$sOrder = 'id desc';
		$aContratos = $this->Contrato->findAll($sConditions,null,$sOrder);
		if(isset($aContratos[0])){
			$aContrato = $aContratos[0]; //ultimo contrato ingresado
		}
		
		//controla si esta cerrado el mes de finalizacion del contrato
		$dMesFin = $aContrato['Contrato']['fecha_fin'];
		
		$bCerrado = $this->Contrato->requestAction("historialprecios/mesCerrado/$iIdCliente/$dMesFin/");
		if(!$bCerrado){
			//es posible finalizar el contrato si la nueva fecha no pertenece a un mes cerrado
			$bCerrado = $this->Contrato->requestAction("historialprecios/mesCerrado/$iIdCliente/$dFechaNueva/");
			if(!$bCerrado){
				//es posible finalizar el contrato
				
				//controla si existen prestaciones futuras
				$this->ModelLoader->setController($this);
				$this->ModelLoader->load('Prestacion');
				$sConditions = "fecha_inicio > '$dFechaNueva' and clientes_id = $iIdCliente";
				$aPrestaciones = $this->Prestacion->findAll($sConditions);				

				if(sizeof($aPrestaciones)>=1){
					return $aPrestaciones;
				}
				else{
					//cambia la fecha de fin del contrato
					$this->Contrato->cambiarFechaFin($iIdCliente,$dFechaNueva);
					return true;
				}			
			}
			
		}
		else{
			//no es posible finalizar el contrato
			return false;
		}
	}
	
	/**
	 * Cambia la fecha de contrato para mas adelante
	 * @return boolean, si fue posible expander el contrato o no
	 * @param $dFechaFinNueva date formato 'Y-m-d'
	 */
	function expander($dFechaFinNueva){
		//
	}
}
?>